Repository navigation
fix(agc): present EOP flips when draws are pipelined - #6616
Conversation
With the queue-0 draw pipeline on, the default since boykopovar#1202, the packet loop hands every label-writing packet to the pipeline and skips the rest of the loop. A RELEASE_MEM that completes a reserved EOP flip (sceVideoOutSubmitEopFlip, boykopovar#5539) is a label write, so its label landed but the flip branch never ran: the reservation was consumed and the flip never presented. video_out_flip_eop and video_out_flip_eop_main failed and video_out_flip_eop_aftergpu timed out. Keep packets that carry a reserved flip out of the pipeline. They take the normal path, which drains the pipeline before the flip as it does for flip packets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I checked the one-line guard against #6462. That issue reports an EOP delivery on flips that crashes Death Stranding 2, while this PR restores the reserved EOP |
|
Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.
|
|
I ran the Death Stranding 2 reproduction from #6462 with this change. The base is main 0029e62, which already has the pipelined default, plus the three local fixes DS2 needs to reach that point. Without this PR the title dies at 56.6 s on a null call in its event thread ( |
|
On the overlap with #6501: both PRs change the same Thanks @fma-rc for running the #6462 Death Stranding 2 reproduction. Its first flip is a flip packet alone, which |
|
One additional related data point from #6350: the reporter measured two |
|
I opened #6963 stacked on this PR, with |
|
Confirmation on Windows with a real presenting GPU (the PR's tests were Xvfb/lavapipe): Windows 11 10.0.26200.9711, RTX 5070 Ti (NVIDIA 617.42), Ryzen 7 9800X3D, WinLibs GCC 15.2.0 posix UCRT r7, Release, main f3263df, video_out_flip_tests run directly in a real window (ctest skips them on Windows under the offscreen driver).
I did not run the full ctest with the change. AI-assisted: yes |
|
Linux data point on NVIDIA. Ubuntu 24.04.4 (kernel 6.8.0-147), NVIDIA RTX 4000 SFF Ada Generation, driver 595.99.02 (open kernel module), GCC 13.3.0, Release, bundled dependencies, SPIRV-Tools ON. Base A first-parent binary search over
|
|
Linux integration validation on latest main
These are local integration results: the base also carries the existing Crimson Spires rendering/import fixes, so this is not a clean-main-only test. Integration pins before/after: AI-assisted: yes. |
|
Independent Windows/NVIDIA cross-test, current
Also confirms #6899 on Windows: our initial offscreen run skipped the display cases, and switching the test driver exposed this regression. No replacement PR opened. AI-assisted: Codex; only public synthetic fixtures used for these tests. |
|
Checked the one-line guard against the packet loop: |
What
EOP flips (
sceVideoOutSubmitEopFlip, #5539) never present on currentmain. #1202 turned the queue-0 draw pipeline on by default. With the pipeline on,Driver::executehands every label-writing packet to the pipeline (enqueueLabelPacket) andcontinues. Flip packets and rendering waits are excluded, but aRELEASE_MEMthat completes a reserved EOP flip is not. So its label lands while thesubmission.flips.contains(cursor)branch never runs: the reservation is consumed (flipPendingNum0), the label reads 1, andcountstays 0 withcurrentBuffer-1.This PR keeps packets that carry a reserved flip out of the pipeline. They take the normal path, which drains the pipeline first, because
RELEASE_MEMis not a pipeline-keeping opcode, and then present the flip, as flip packets already do. It is one condition inPacketExecution.cpp.CI does not catch this. All 23 VideoOut flip tests skip on both Linux and Windows CI, because SDL2's
offscreendriver has no Vulkan. I ran them against a local Xvfb with-DANYPS5_VIDEO_OUT_TEST_DRIVER=x11.Tested
Ubuntu 24.04, GCC 13, Release, full build. VideoOut tests use Xvfb (
DISPLAY=:99) and-DANYPS5_VIDEO_OUT_TEST_DRIVER=x11on lavapipe (Mesa 25.2.8).Bisecting with
git bisect --first-parentonvideo_out_flip_eopfrom #5539's merge (937cd6cab, passes) tomaingives8856f180c(#1202) as the first failing merge; its parente49ec591dpasses.video_out_flip_eop_eop_main_eop_aftergpumain,APS5_PIPELINED_DRAWS=0main, pipeline on (default)APS5_PIPELINED_DRAWS=0With this PR, all 21 VideoOut tests pass on Xvfb/lavapipe.
ctest -R '^agc_'passes 606/606 on the Intel HD 530. On lavapipe it passes 605/606: the one failure is the existingagc_frame_dump_iopipe-capacity flake that #6573 fixes.python3 tools/check_conventions.py --base origin/mainpasses.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)agc_tests only (Xvfb has no DRI3 for presentation)🤖 Generated with Claude Code